package per.jdz.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Executors工具类 三种线程池的使用示例
 * newSingleThreadExecutor：创建一个单线程的线程池，它只会用唯一的线程来执行任务，保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
 * newFixedThreadPool：创建一个固定大小的线程池，每当提交一个任务就创建一个线程，直到线程达到线程池的最大大小。
 * newCachedThreadPool：创建一个可缓存的线程池，如果线程池的线程数量超过了处理任务的线程，
 * 那么就会回收部分空闲的线程，当任务数增加时，线程池也能自动扩容。
 */
public class ThreeTypePoolDemo {
    public static void main(String[] args) {
        // 创建线程池
        ExecutorService threadPool = Executors.newSingleThreadExecutor();
        // ExecutorService threadPool = Executors.newFixedThreadPool(5);
        // ExecutorService threadPool = Executors.newCachedThreadPool();
        try {

            for (int i = 0; i < 100; i++) {
                final int temp = i;
                threadPool.execute(() -> System.out.println(Thread.currentThread().getName() + ": " + temp));
            }
        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            // 关闭线程池
            threadPool.shutdown();
        }
    }
}